/*************************************************************
*File Name   : communication_interface.h
*Author      : 吴泽晓               
*Version     : V3.0
*Date        : 2014.02.07
*Description : 通讯接口文件
**************************************************************/
 
 #ifndef __COMMUNICATION_INTERFACE_H__
 #define __COMMUNICATION_INTERFACE_H__
 
 /* Includes ------------------------------------------------*/
 #include "stm32f4xx.h" 
 
 /* Types ---------------------------------------------------*/
 typedef struct 
 {
	s32 gyro_x_raw;
	s32 gyro_y_raw;
	s32 gyro_z_raw;		//陀螺仪原始数据
	s32 acce_x_raw;
	s32 acce_y_raw;
	s32 acce_z_raw;		//加速度计原始数据
	s32 magnet_x_raw;	
	s32 magnet_y_raw;
	s32 magnet_z_raw; //磁力计原始数据
	s32 PitchAngle_zero;	//俯仰角零点
	s32 PitchAngleRate_offset;	//陀螺仪漂水平补偿量
	s32 PitchAcce_dynamic_offset;	//加速度计动态补偿量
	s32 static_pitch_angle;
	s32 static_roll_angle;
	s32 static_yaw_angle;			//物理角度
	s32 fused_pitch_angle;
	s32 fused_roll_angle;
	s32 fused_yaw_angle;			//融合角度
	s32 pitch_angle_rate;			//俯仰角速度
	s32 roll_angle_rate;			//横滚角速度
 }NavigationSensorInfo;			//传感器导航信息
 
typedef struct 
{
	s32 FusedPitchAngle;
	s32 FusedRollAngle;
	s32 FusedYawAngle;
	
	s32 PitchAngleRate;
	s32 RollAngleRate;
	s32 YawAngleRate;
}SensorControlInfo;			//传感器控制信息

typedef enum
{
	PLATFORM_TWOWHEEL = 0,
	PLATFORM_ONEWHEEL,
	PLATFORM_SKIBOARD,
}PlatformInfo;					//应用平台信息

typedef struct
{
	s32 kp_weight;
	s32 ki_weight;
	s32 kd_weight;				//根据不同模式参数补偿
	s32 kt_weight;				
	s32 control_adjust;		//控制补偿量，用来特殊处理
}PID_ParasAdjustInfo;		//PID参数权重调整信息

typedef struct
{
	NavigationSensorInfo sensor_info;				//传感器信息
	u32 balance_flag;			//平衡标志，0表示非平衡模式，1表示平衡但不载人，2表示载人平衡模式
	u32 fused_system;			//0表示单轴系统，1表示双轴系统，2表示三轴系统
}SensorUpdateParasInfo;			//传感器更新参数

typedef struct
{
	s32 speed;
	u32 ospe;
	u32 work_mode;
	s32 limit_speed;
	s32 angle_init;
}MotorAccUpdateInfo;		//电机加速度更新信息

/* WorkMode Defines ---------------------------------------------*/			
#define BAL_MODE_IDLE                      0	 //空闲模式
#define BAL_MODE_TRAIN							1  //训练模式
#define BAL_MODE_NORMAL							2	 //正常模式
#define BAL_MODE_ASSIST							3	 //助力模式	
#define BAL_MODE_FIND_BALANCE				4  //找平衡模式
#define BAL_MODE_SPEED_BALANCE			5	 //速度自平衡模式
#define BAL_MODE_DISTANCE_BALANCE		6	 //距离自平衡模式
#define BAL_MODE_STOP								7	 //安全停车模式
#define BAL_MODE_PWM_STOP						8	 //PWM停止模式

/* FusedMode Defines ----------------------------------------*/
#define SINGLE_AXIS							0
#define DOUBLE_AXIS							1
#define THREE_AXIS							2

/* Macros ---------------------------------------------------*/
#define LIMIT(x, m)						if((x) > (m)) (x) = (m); else if((x) < (-m)) (x) = -(m);	//m为正数
#define KMPH_FOR_MORTOR(s)		((int)((s) * 3812))	 	//KM/H For Two Wheel
 
 
/* Exported Variables ---------------------------------------*/
 
 
/* Exported Functions ---------------------------------------*/
/******************************************************************************
* Function Name : ResetSystermAll
* Description   : 复位整个系统
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void ResetSystermAll(void);
 
/******************************************************************************
* Function Name : ResetSpeedBalanceSystem
* Description   : 复位速度自平衡系统
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void ResetSpeedBalanceSystem(void); 
 
/******************************************************************************
* Function Name : ResetDistanceBalanceSystem
* Description   : 复位位置自平衡系统
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void ResetDistanceBalanceSystem(void); 
 
/******************************************************************************
* Function Name : ResetOverSpeedSysterm
* Description   : 复位过速保护控制系统
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void ResetOverSpeedSysterm(void);

/******************************************************************************
* Function Name : EnableSpeedBalance
* Description   : 使能速度自平衡
* Input         : flag、标志位
* Output        : None
* Return        : None
******************************************************************************/
void EnableSpeedBalance(u32 flag);

/******************************************************************************
* Function Name : EnableDistanceBalance
* Description   : 使能位置自平衡
* Input         : flag、标志位
* Output        : None
* Return        : None
******************************************************************************/
void EnableDistanceBalance(u32 flag);

/******************************************************************************
* Function Name : ResetOverSpeedSysterm
* Description   : 设置滤波器更新频率
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetSystermFilterTime(s32 filtertime);

/******************************************************************************
* Function Name : SetSystermFilterKg
* Description   : 设置滤波器参数
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetSystermFilterKg(s32 kg);

/******************************************************************************
* Function Name : SetAppPlatform
* Description   : 设置APP平台
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetAppPlatform(PlatformInfo platform);


/******************************************************************************
* Function Name : SetBalanceSpeed
* Description   : 设置速度自平衡行走速度
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetBalanceSpeed(s32 speed);

/******************************************************************************
* Function Name : SetDBalanceDistance
* Description   : 设置位置自平衡行走位置
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetDBalanceDistance(s32 distance);

/******************************************************************************
* Function Name : SetPIDParas
* Description   : 设置PID参数
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void SetPIDParas(PID_ParasAdjustInfo pid_paras);
 
/******************************************************************************
* Function Name : GetDebugInfo
* Description   : 调试接口函数
* Input         : None
* Output        : None
* Return        : None
******************************************************************************/
void GetDebugInfo(s32 *debug_data, u8 size);

/******************************************************************************
* Function Name : AppUpdateSensor
* Description   : 更新当前的传感器信息
* Input         : g_tSystem_status 传感器信息  
* Output        : None
* Return        : None
******************************************************************************/
void AppUpdateSensor(SensorUpdateParasInfo *s_tSystem_status);

/******************************************************************************
* Function Name : AppUpdateSensor
* Description   : 更新当前电机加速度信息
* Input         : m_tSystem_status 车体电机信息
* Output        : None
* Return        : None
******************************************************************************/
s32 AppUpdateMotorAcc(MotorAccUpdateInfo m_tSystem_status);

 
 #endif
 


